package com.mt.mall.dao.Order;

import com.mt.common.core.web.base.PageDTO;
import com.mt.mall.entity.Order.Order;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Component;
import org.apache.ibatis.annotations.Param;
import java.util.List;

@Mapper
@Component(value = "orderDao")
public interface OrderDao {

    /**
    * 根据分页参数查询订单集合
    *
    * @param pageDTO 分页条件
    */
    public List<Order> findOrders(PageDTO pageDTO);

    /**
    * 查询全部订单集合
    *
    */
    public List<Order> findAllOrders();

    /**
    * 查询所有订单集合(只提取ID 和 Name)
    *
    */
    public List<Order> findAllOrdersWithIdName();

    /**
    * 根据名称查询订单集合(只提取ID 和 Name)
    *
    * @param orderName 名称
    */
    public List<Order> findOrdersWithIdNameByName(@Param("orderName") String orderName);

    /**
    * 根据ID查询指定的订单(只提取ID 和 Name)
    *
    * @param orderId Id
    */
    public Order findOrdersWithIdNameById(@Param(" orderId") Long orderId);

    /**
    * 根据分页参数查询订单集合的数量
    *
    * @param pageDTO 分页条件
    */
    public Long findOrderTotalCount(PageDTO pageDTO);

    /**
    * 根据ID查询指定的订单
    *
    * @param orderId Id
    */
    public Order findOrder(@Param("orderId") Long orderId);

    /**
    * 根据ID查询指定的订单(包含外键)
    *
    * @param orderId Id
    */
    public Order findOrderWithForeignName(@Param("orderId") Long orderId);

    /**
    * 新增订单
    *
    * @param order 实体对象
    */
    public Long saveOrder(Order order);

    /**
    * 更新订单
    *
    * @param order 实体对象
    */
    public Long updateOrder(Order order);

    /**
    * 根据ID删除订单
    *
    * @param orderId ID
    */
    public Long deleteOrder(@Param("orderId") Long orderId);

    Integer orderTimedOutUpdate(@Param("orderId") Long orderId);

    void payOrder(@Param("orderId") Long orderId);

    String findImageUrl(@Param("commodityId") Long commodityId);

    void updateOrderStatus(@Param("orderId") Long orderId,@Param("status") String status);

    void updateAddress(Order order);

    void confirmReceipt(@Param("orderId") Long orderId);

    void delivery(@Param("orderId") Long orderId);
}
